package com.study.algorithm.datastruct.graph;

import com.study.algorithm.datastruct.graph.model.Graph;
import com.study.algorithm.datastruct.graph.model.Vertex;

import java.util.List;


/**
 * 这里面的所有图类操作都是按照有向图来进行的（无向图请自行翻译)
 */
public interface GraphOperate extends GraphBasicOperate {
    public boolean isExistPathFromVertexToVertex(Graph graph, Vertex start, Vertex end);

    /**
     * @param graph 需要探索的图
     * @param start 开始节点（入口）
     * @param end   结束节点（出口)
     * @return 路径节点轨迹（由于是栈结构，所以顶端存放的是出口，低端存放的是入口)
     */
    public List<Vertex> getOnePathFromVertexToVertex(Graph graph, Vertex start, Vertex end);

    /**
     * @param graph        需要探索的图
     * @param start        开始节点（入口）
     * @param end          结束节点（出口)
     * @param isDepthFirst 是否使用深度优先遍历（默认使用广度优先)
     * @return 路径节点轨迹（由于是栈结构，所以顶端存放的是出口，低端存放的是入口)
     */
    public List<Vertex> getOnePathFromVertexToVertex(Graph graph, Vertex start, Vertex end
            , boolean isDepthFirst);

}
